import plotly.express as px
import pandas as pd

import json

# 探索数据的结构
filename = "data/eq_data_1_day_m1.json"
with open(filename) as f:
    all_eq_data = json.load(f) # json.load(f)导入json文件f，以字典形式返回

all_eq_dicts = all_eq_data['features'] # 字典中键'features'对应的值是一个列表

# 提取所有的震级数据
mags, titles, lons, lats = [], [], [], []
for eq_dict in all_eq_dicts:
    mag = eq_dict['properties']['mag']
    title = eq_dict['properties']['title']
    lon = eq_dict['geometry']['coordinates'][0] # 经度
    lat = eq_dict['geometry']['coordinates'][1] # 纬度
    mags.append(mag)
    titles.append(title)
    lons.append(lon)
    lats.append(lat)

data = pd.DataFrame(
    data=zip(lons, lats, titles, mags), columns=['经度', '纬度', '位置', '震级']
    # column：栏目
) # 可用pandas的DataFrame将用到的数据封装起来，使用时只需输入指定字符串即可
data.head()

# 绘制震级散点图
fig = px.scatter(
    # 先输入data封装的数据，再使用字符串使用里面的数据
    data,
    x='经度',
    y='纬度',
    labels={'x': '经度', 'y': '纬度'},
    range_x=[-200, 200],
    range_y=[-90, 90],
    width=800,
    height=800,
    title='全球地震散点图',
    size='震级',
    size_max=10,
    color='震级',
    hover_name='位置',
)
# size='震级'，以震级大小确定散点图中点的大小；size_max设置最大点大小
# hover_name='位置'，鼠标指向某点时显示文本，增加data中'位置'文本数据

fig.write_html('global_earthquakes.html')
# fig.show()